# Margem de erro com efeito de conglomerização          #
#                                                       #
# Autor: Raphael Nishimura                              #
#        raphael.nishimura@gmail.com                    #
# Data: 19/10/2014                                      #
#                                                       #
# Descrição: Cálculo das margens de erro máxima         #
# de pesquisas do Datafolha e IBOPE para proporções de  #
# votos dos candidatos considerando-se efeitos de       #
# conglomerização (decorrente do município).            #
# É utilizado dados do 1o turno da eleição presidencial #
# de 2010 para o cálculo do coeficiente de correlação   #
# intra-classe                                          #

# Função CCI                                                                             #
# Calcula o Coeficiente de Correlação Intra-classe (CCI) populacional para uma proporção #
# onde se tem os totais de caso em cada conglomerado na população                        #
# Utiliza-se a definição dada por Särndal, Swensson and Wretman (1992), pág. 131         #
# Parâmetros da função:                                                                  #
# ytotal: vetor com total de casos na categoria da proporção a ser calculada em cada     #
#         conglomerado                                                                   #
# tam: vector com número total de casos em cada conglomerado                             #
CCI <- function(ytotal, tam)
{
   N <- sum(tam, na.rm = TRUE)
   Pi <- ytotal/tam
   P <- sum(ytotal, na.rm = TRUE)/sum(tam, na.rm = TRUE)
   SyU2 <- (N/(N-1))*(P*(1-P))
   SyUi2 <- (ytotal - tam*Pi^2)/(tam - 1)
   SyW2 <- sum(SyUi2*(tam-1), na.rm = TRUE)/sum(tam-1, na.rm = TRUE)
   CCI <- 1 - (SyW2/SyU2)
   CCI
}

# Abre base de dados com resultados do 1o turno da eleição presidencial por município     #
# Colocar em "Pasta" na função setwd abaixo o caminho onde está o arquivo votosMuni.RData #
setwd("Pasta")
load("votosMuni2014.RData")

# Calcula o vetor com o número total de votos em cada município #
tam <- apply(votosMuni[,c("AECIO.NEVES","DILMA","EDUARDO.JORGE","EYMAEL","LEVY.FIDELIX","LUCIANA.GENRO","MARINA.SILVA","MAURO.IASI",
                            "PASTOR.EVERALDO","RUI.COSTA.PIMENTA","ZE.MARIA","VOTOS_BRANCOS","VOTOS_NULOS")], 1, sum, na.rm = TRUE)

# Cria matriz para guardar os CCI de cada candidato #
CCIcandidatos <- matrix(nrow = 13, ncol = 1)
rownames(CCIcandidatos) <- c("AECIO.NEVES","DILMA","EDUARDO.JORGE","EYMAEL","LEVY.FIDELIX","LUCIANA.GENRO","MARINA.SILVA","MAURO.IASI",
                            "PASTOR.EVERALDO","RUI.COSTA.PIMENTA","ZE.MARIA","VOTOS_BRANCOS","VOTOS_NULOS")
colnames(CCIcandidatos)<- "CCI"

# Calcula os CCI de cada candidato #
CCIcandidatos["AECIO.NEVES",] <- CCI(votosMuni[,"AECIO.NEVES"], tam)
CCIcandidatos["DILMA",] <- CCI(votosMuni[,"DILMA"], tam)
CCIcandidatos["EDUARDO.JORGE",] <- CCI(votosMuni[,"EDUARDO.JORGE"], tam)
CCIcandidatos["EYMAEL",] <- CCI(votosMuni[,"EYMAEL"], tam)
CCIcandidatos["LEVY.FIDELIX",] <- CCI(votosMuni[,"LEVY.FIDELIX"], tam)
CCIcandidatos["LUCIANA.GENRO",] <- CCI(votosMuni[,"LUCIANA.GENRO"], tam)
CCIcandidatos["MARINA.SILVA",] <- CCI(votosMuni[,"MARINA.SILVA"], tam)
CCIcandidatos["MAURO.IASI",] <- CCI(votosMuni[,"MAURO.IASI"], tam)
CCIcandidatos["PASTOR.EVERALDO",] <- CCI(votosMuni[,"PASTOR.EVERALDO"], tam)
CCIcandidatos["RUI.COSTA.PIMENTA",] <- CCI(votosMuni[,"RUI.COSTA.PIMENTA"], tam)
CCIcandidatos["ZE.MARIA",] <- CCI(votosMuni[,"ZE.MARIA"], tam)
CCIcandidatos["VOTOS_BRANCOS",] <- CCI(votosMuni[,"VOTOS_BRANCOS"], tam)
CCIcandidatos["VOTOS_NULOS",] <- CCI(votosMuni[,"VOTOS_NULOS"], tam)

# Obtem-se o maior CCI para calcular uma margem de erro conservadora considerando-se o efeito de conglomerização #
CCImax <- max(CCIcandidatos)

# Cálculo das margens de erro máxima para proporção considerando-se o efeito de conglomeração      #
# Aqui utilizamos um modelo bastante simples para considerar tal efeito. Lembrando que:            # 
# 1) O efeito do planejamento (EPA) decorrente da conglomerização (Kish, 1965) é aproximadamente:  #
#    EPA ˜ 1 + CCI*(bmedio - 1), em que bmedio é o número médio de entrevistas por conglomerado    # 
# 2) Para o cálculo da margem de erro máxima de uma proporção, assume-se que a proporção é P = 0.5 #
# 3) Utilizamos um nível de confiança de 95% (conf = 0.95)                                         #

P <- 0.5
conf <- 0.95 

# Cálculo da margem de erro máxima considerado efeito de #
# conglomerização da pesquisa BR-01068/2014 do Datafolha #
# Parâmetros da pesquisa utilizados:                     #
# Tamanho da amostra: n = 2879                           #
# Número de municípios selecionados: a = 178             #
n.DF <- 2879
a.DF <- 178
bmedio.DF <- n.DF/a.DF
EPA.DF <- 1 + CCImax*(bmedio.DF - 1)
margem.erro.DF <- qnorm(1-((1-conf)/2))*sqrt(EPA.DF*(P*(1-P)/(n.DF-1)))
margem.erro.DF

# Cálculo da margem de erro máxima considerado efeito de #
# conglomerização da pesquisa BR-01071/2014 do IBOPE     #
# Parâmetros da pesquisa utilizados:                     #
# Tamanho da amostra: n = 3010                           #
# Número de municípios selecionados: a = 205             #
n.IBOPE <- 3010
a.IBOPE <- 205
bmedio.IBOPE <- n.IBOPE/a.IBOPE
EPA.IBOPE <- 1 + CCImax*(bmedio.IBOPE - 1)
margem.erro.IBOPE <- qnorm(1-((1-conf)/2))*sqrt(EPA.IBOPE *(P*(1-P)/(n.IBOPE -1)))
margem.erro.IBOPE

